package com.itranswarp.learnjava.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class Validators {
    // 注入所有符合条件的Bean:ValidateInterface 这个类型就是接口类型，
    // 这里的validators就是一个List<ValidateInterface>类型的Bean，
    // 它包含了所有符合条件的Bean。
    // 因为我们注入的是List<ValidateInterface>，所以，
    // 当容器有多个符合条件的Bean时，Spring自动把它们全部注入到List中。
    // 因此，我们只需要编写一个统一的validate()方法，
    // 然后，依次调用List中每个Bean的validate()方法即可。
    // 这种方式，就避免了编写多个validateXXX()方法。
    // 此外，我们还可以通过@Order注解来指定Bean的顺序，
    // 这样，容器注入List的时候，就会自动按照顺序排序。
    // 例如，我们可以给ValidateEmail加上@Order(1)，
    // 给ValidatePhone加上@Order(2)，
    // 给ValidateName加上@Order(3)，
    // 这样，容器注入List的时候，就会自动按照@Order指定的顺序排序。
    @Autowired
    private List<ValidateInterface> validators;

    public void validate(String email, String phone, String name) {
        for (ValidateInterface v : validators) {
            v.validate(email, phone, name);
        }
    }
}